#ifndef TITLEBAR_H
#define TITLEBAR_H

#include <QLabel>
#include <QFrame>
#include <QMovie>
#include <QFont>
#include <QIcon>
#include <QStyle>
#include <QDebug>
#include <QFrame>
#include <QTimer>
#include <QObject>
#include <QListView>
#include <QShortcut>
#include <QComboBox>
#include <QPushButton>
#include <QHBoxLayout>
#include <QMouseEvent>
#include <QVBoxLayout>
#include <QMessageBox>
#include <QApplication>
#include <QDesktopWidget>
#include <QPropertyAnimation>
#include <QParallelAnimationGroup>
#include <QGraphicsDropShadowEffect>
#include "windows.h"

#define PADDING 5

#ifndef SAFEDELETE
#define SAFEDELETE(pointer) \
{                           \
    if(pointer)             \
    {                       \
        delete pointer;     \
    }                       \
    pointer = NULL;         \
}
#endif

namespace TITLEBAR
{
    enum WIDGETBYTTONTYPE
    {
        MAXWIDGET,      //去掉最大化按钮
        MINWIDGET,      //去掉最小化按钮
        CloseWIDGET,    //去掉关闭按钮
        ALLWIDGET,      //去掉除关闭按钮外的所有按钮
        NOBUTTON,		//去除所有按钮
    };
}

class TitleBar : public QFrame
{
    Q_OBJECT

public:
    explicit TitleBar(QWidget *parentWidget = nullptr);

    enum Direction { UP = 0, LEFT, RIGHT, LEFTTOP, RIGHTTOP, NONE };

    void initData();
    void initBotton();                              //初始化按钮
    void initConnect();                             //初始化值
    void setWindowTitle(const QString &title);      //设置标题
    void setWindowIcon(const QString &icon);        //设置图标(为空时隐藏图标)
    void subWindowButton(const int &type);          //设置按钮
    void Shadow_Warning();                          //设置阴影
    void RemoveMaxMinButton();                      //移除最大最小按钮
    void Set_MaximizeFlag();                        //设置双击标题栏是否可以最大、最小化
    void Set_MouseShapeFlag(bool MouseShape);		//设置标题栏是否可以改变大小
    bool FileIsExist(QString strFile);              //文件是否存在
    void SetTitleLabelTextColor(int R,int G,int B);	//修改标题显示文字颜色

    const static int TITLEBARHEIGHT = 30;           //标题栏高度
    const static int CONTROLWIDTH   = 16;           //控件宽度

    QRectF boundingRect() const;
    QRectF leftBorder() const;
    QRectF rightBorder() const;
    QRectF topBorder() const;
    QRectF bottomBorder() const;
    void setMousePressCursorShape(const QPointF& pt, bool isShow = true);

public slots:
    void showMax();                                 //最大化窗口
    void showMin();                                 //最小化窗口
    void showClose();                               //关闭窗口
    void set_ChildWindowColor(int R,int G,int B);   //设置标题栏背景色
    void ModifyTitleBarTip();						//修改标题栏按钮提示语言

signals:
    void send_close();								//发送关闭信号
    void send_showToolbar();                        //发送显示/隐藏工具栏信号

private slots:


public:
    QPushButton     *maxButton;                     //最大化按钮
    QPushButton     *minButton;                     //最小化按钮
    QPushButton     *closeButton;                   //关闭按钮
    QLabel          *imgLabel;                      //图片框
    QLabel          *titleLabel;                    //标题名
    QWidget         *parentWidget;                  //父窗口
    bool            mousePress;                     //按钮点击标志位
    QPoint          movePoint;                      //鼠标移动需要记住的点

    int             switchFlag;
    int             MaximizeFlag;                   //双击是否最大化
    int             IsShow_Toolbar;                 //显示隐藏工具栏
    int             Original_window_x;              //窗口x坐标
    int             Original_window_y;              //窗口y坐标
    int             Original_window_Mywidth;        //窗口宽度
    int             Original_window_Myheight;       //窗口高度
    bool			isTitleBarResize;				//标题栏是否可以改变大小

    bool			isLeftPressDown;				//判断左键是否按下
    Direction		dir;							//窗口大小改变时，记录改变方向

private:
    void mousePressEvent(QMouseEvent * event);      //鼠标点击事件
    void mouseReleaseEvent(QMouseEvent *event);     //鼠标释放事件
    void mouseMoveEvent(QMouseEvent * event);       //鼠标移动事件
    void mouseDoubleClickEvent(QMouseEvent *event); //鼠标双击事件
    bool eventFilter(QObject *obj, QEvent *event);
    void paintEvent(QPaintEvent *event);			//绘制事件
};

#endif // TITLEBAR_H



